
#include "nane/CodecSystem/Sound/WAV/WAVSoundCodecSystem.h"
#include "nane/CodecSystem/Sound/WAV/WAVSoundDecoder.h"
#include "nane/CodecSystem/Sound/WAV/WAVSoundEncoder.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    WAVSoundCodecSystem::WAVSoundCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    WAVSoundCodecSystem::~WAVSoundCodecSystem()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool WAVSoundCodecSystem::Initialize()
    {
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void WAVSoundCodecSystem::Shutdown()
    {
        
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const char* WAVSoundCodecSystem::GetFileType()
    {
        return "wav";
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundDecoder* WAVSoundCodecSystem::CreateDecoder( IInputRef* _input )
    {
        WAVSoundDecoder* wavDecoder = new WAVSoundDecoder();
        if( wavDecoder->Initialize(_input) == false )
        {
            delete wavDecoder;
            wavDecoder = NULL;
        }
        return wavDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundDecoder* WAVSoundCodecSystem::CreateDecoder( IInputSeekableRef* _inputSeekable )
    {
        return CreateDecoder(static_cast<IInputRef*>(_inputSeekable));
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void WAVSoundCodecSystem::ReleaseDecoder( IDecoder* _decoder )
    {
        WAVSoundDecoder* wavDecoder = static_cast<WAVSoundDecoder*>(_decoder);
        wavDecoder->Shutdown();
        delete wavDecoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ISoundEncoder* WAVSoundCodecSystem::CreateEncoder( IOutputRef* _output )
    {
        WAVSoundEncoder* wavEncoder = new WAVSoundEncoder();
        if( wavEncoder->Initialize(_output) == false )
        {
            delete wavEncoder;
            wavEncoder = NULL;
        }
        return wavEncoder;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void WAVSoundCodecSystem::ReleaseEncoder( IEncoder* _encoder )
    {
        WAVSoundEncoder* wavEncoder = static_cast<WAVSoundEncoder*>(_encoder);
        wavEncoder->Shutdown();
        delete wavEncoder;
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
